/* @author cerimice */
package Dialogos.Modulo.RecargaCartucho;

import Dialogos.Modal.Entidad.Cartucho.DatosCartuchoDlg;
import Dialogos.Modal.RecargaCartucho.SeguimientoRecargaCartuchoDlg;
import Logica.Modulo.RecargaCartucho.GenerarRecargaCartuchoLogica;

import Persistencia.Definicion.Cartucho;
import Persistencia.Definicion.SeguimientoCartucho;
import Sistema.Configuracion;

import java.util.logging.Logger;

import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
import com.vaadin.ui.Button;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.TextField;
import com.vaadin.data.Property;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Window.Notification;
import com.vaadin.ui.themes.BaseTheme;

public class GenerarRecargaCartuchoDlg extends Panel
    {
    private GenerarRecargaCartuchoLogica logica;
    
    private TextField   claveBuscar;
    private Button      buscar,informacionCartucho,seguimientoCartucho;
    private Table       tablaCartucho,tablaSeguimientoCartucho;
    
    public GenerarRecargaCartuchoDlg()
        {
        logica = new GenerarRecargaCartuchoLogica();
        
        agregarComponentes();
        }
    
    private void agregarComponentes()
        {
        claveBuscar = new TextField("Proporciona la clave del cartucho");
            claveBuscar.setWidth("700px");
        buscar = new Button("Buscar");
            buscar.setWidth("100px");
            buscar.addListener(new Button.ClickListener()  {@Override public void buttonClick(Button.ClickEvent event){buscarCartucho();}});  
        tablaCartucho = new Table("RESULTADO DE CARTUCHOS");
            tablaCartucho.setWidth("800px");
            tablaCartucho.setHeight("150px");
            tablaCartucho.setNullSelectionAllowed(false);
            tablaCartucho.setSelectable(true);
            tablaCartucho.setImmediate(true);
            tablaCartucho.addListener(new Property.ValueChangeListener()    {@Override public void valueChange(ValueChangeEvent event) {cargarInformacionSeleccionado();}});
            tablaCartucho.addContainerProperty("CLAVE",String.class,"");
            tablaCartucho.addContainerProperty("CLIENTE",String.class,"");
            tablaCartucho.addContainerProperty("MARCA",String.class,"");
            tablaCartucho.addContainerProperty("MODELO CARTUCHO",String.class,"");
            tablaCartucho.setColumnWidth("CLAVE",100);
            tablaCartucho.setColumnWidth("CLIENTE",200);
            tablaCartucho.setColumnWidth("MARCA",100);
            tablaCartucho.setColumnWidth("MODELO CARTUCHO",100);
        tablaSeguimientoCartucho = new Table("SEGUIMIENTO DE RECARGAS DE CARTUCHO");
            tablaSeguimientoCartucho.setWidth("800px");
            tablaSeguimientoCartucho.setHeight("150px");
            tablaSeguimientoCartucho.setNullSelectionAllowed(false);
            tablaSeguimientoCartucho.setSelectable(true);
            tablaSeguimientoCartucho.setImmediate(true);
            tablaSeguimientoCartucho.addContainerProperty("CLAVE",String.class,"");
            tablaSeguimientoCartucho.addContainerProperty("FECHA",String.class,"");
            tablaSeguimientoCartucho.addContainerProperty("COMENTARIO",TextArea.class,"");
            tablaSeguimientoCartucho.setColumnWidth("CLAVE",100);
            tablaSeguimientoCartucho.setColumnWidth("CLAVE",100);
            tablaSeguimientoCartucho.setColumnWidth("COMENTARIO",600);
            
        informacionCartucho = new Button();
            informacionCartucho.setWidth("32px");
            informacionCartucho.setIcon(new ThemeResource("icons/personal/informacionOrden.png"));
            informacionCartucho.setStyleName(BaseTheme.BUTTON_LINK);
            informacionCartucho.setDescription("Muestra los datos del cartucho seleccionado");
            informacionCartucho.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){mostrarInformacionCartucho();}});
            
        seguimientoCartucho = new Button();
            seguimientoCartucho.setWidth("32px");
            seguimientoCartucho.setIcon(new ThemeResource("icons/personal/agregarSeguimientoOrdenServicio.png"));
            seguimientoCartucho.setStyleName(BaseTheme.BUTTON_LINK);
            seguimientoCartucho.setDescription("Agregar datos de seguimiento de recarga");
            seguimientoCartucho.addListener(new Button.ClickListener() {@Override public void buttonClick(Button.ClickEvent event){agregarSeguimientoRecarga();}});
            
        VerticalLayout principal =  new VerticalLayout();
            VerticalLayout seccionBuscar = new VerticalLayout();
                HorizontalLayout seccionBuscarDatos = new HorizontalLayout();
                    seccionBuscarDatos.addComponent(claveBuscar);
                    seccionBuscarDatos.addComponent(buscar);
                seccionBuscar.addComponent(seccionBuscarDatos);
                seccionBuscar.addComponent(tablaCartucho);
                seccionBuscar.setComponentAlignment(seccionBuscarDatos, Alignment.TOP_CENTER);
                seccionBuscar.setComponentAlignment(tablaCartucho, Alignment.TOP_CENTER);
            
            HorizontalLayout seccionOperaciones = new HorizontalLayout();
                seccionOperaciones.addComponent(informacionCartucho);
                seccionOperaciones.addComponent(seguimientoCartucho);
            
            HorizontalLayout seccionSeguimientoRecarga = new HorizontalLayout();
                seccionSeguimientoRecarga.addComponent(tablaSeguimientoCartucho);
                seccionSeguimientoRecarga.setComponentAlignment(tablaSeguimientoCartucho,Alignment.TOP_CENTER);
                
            principal.addComponent(seccionBuscar);
            principal.addComponent(seccionOperaciones);
            principal.addComponent(seccionSeguimientoRecarga);
            principal.setComponentAlignment(seccionBuscar, Alignment.TOP_CENTER);
            principal.setComponentAlignment(seccionOperaciones, Alignment.TOP_CENTER);
            principal.setComponentAlignment(seccionSeguimientoRecarga, Alignment.TOP_CENTER);

        this.setCaption("SEGUIMIENTO DE RECARGAS PARA CARTUCHOS Y TONNERS");
        this.addComponent(principal);
        }
    
    private void buscarCartucho()
        {
        try
            {
            String clave = (String)claveBuscar.getValue();
            logica.generarTabla(clave, tablaCartucho);
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());}
        }
    
    private void cargarInformacionSeleccionado()
        {
        try
            {
            String cartucho = (String)tablaCartucho.getValue();
            Cartucho obj = logica.getCartucho(cartucho);
            
            String clave        = "";
            String fecha        = "";
            TextArea comentario = null;
            tablaSeguimientoCartucho.removeAllItems();
            for(SeguimientoCartucho dts:obj.getSeguimiento())
                {
                clave = dts.getClave();
                fecha = Configuracion.getFormatoFechaCorta().format(dts.getFecha());
                comentario = new TextArea("",dts.getComentario());
                comentario.setEnabled(false);
                comentario.setWidth("550px");
                tablaSeguimientoCartucho.addItem(new Object[]{clave,fecha,comentario},clave);
                }
            }
        catch (NullPointerException Ex)
            {
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());
            getWindow().showNotification("Datos del cartucho...","Por favor seleccione un cartucho",Notification.TYPE_WARNING_MESSAGE);
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());}
        }
    
    private void mostrarInformacionCartucho()
        {
        try
            {
            String cartucho = (String)tablaCartucho.getValue();
            if((cartucho.equals("")) || (cartucho==null) || cartucho.isEmpty()){getWindow().showNotification("Datos del cartucho...","Por favor seleccione un cartucho",Notification.TYPE_WARNING_MESSAGE); return;}
            getWindow().addWindow(new DatosCartuchoDlg(logica.getCartucho(cartucho)));
            }
        catch (NullPointerException Ex)
            {
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());
            getWindow().showNotification("Datos del cartucho...","Por favor seleccione un cartucho",Notification.TYPE_WARNING_MESSAGE);
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());}
        }
    
    private void agregarSeguimientoRecarga()
        {
        try
            {
            String cartucho = (String)tablaCartucho.getValue();
            if((cartucho.equals("")) || (cartucho==null) || cartucho.isEmpty()){getWindow().showNotification("Datos del cartucho...","Por favor seleccione un cartucho",Notification.TYPE_WARNING_MESSAGE); return;}
            getWindow().addWindow(new SeguimientoRecargaCartuchoDlg(cartucho));
            cargarInformacionSeleccionado();
            }
        catch (NullPointerException Ex)
            {
            Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());
            getWindow().showNotification("Datos del cartucho...","Por favor seleccione un cartucho",Notification.TYPE_WARNING_MESSAGE);
            }
        catch (Exception Ex)
            {Logger.getLogger(this.getClass().getName()).log(Configuracion.nivelLoggin(),Ex.getMessage());}
        }
    }
